AWS CLIでスイッチロールして一時クレデンシャル情報を環境変数に設定するスクリプト
2021年5月入社の伊藤です。
現在のプロジェクトで、ベースのIAMアカウントからスイッチロールして AWS_ACCESS_KEY_ID
、 AWS_SECRET_ACCESS_KEY
、AWS_SESSION_TOKEN
の環境変数を設定する必要がありました。
今までやったことがなく色々と調べてやってみたので、備忘の意味でも情報を残しておこうと思います。
先輩方の下記の記事は非常に参考になりました!
なお、AWS CLIの設定は完了済みのものとします。
プロファイルの設定
スイッチロール元のIAMユーザーで、MFAのARNを取得します。
スイッチロール先のIAMロールで、ロールARNを取得します。
次に~/.aws/config
を編集し、スイッチロール先のプロファイルを追加します。
今回は例として test
プロファイルを追加しています。
mfa_serial
と role_arn
には、それぞれ上記で取得したMFAとロールのARNを設定します。
$ vi ~/.aws/config [default] region = ap-northeast-1 output = json [profile test] region = ap-northeast-1 mfa_serial = arn:aws:iam::11111111:mfa/hoge role_arn = arn:aws:iam::22222222:role/hoge source_profile = default
ここまで設定したら、 test
プロファイルを環境変数に設定しておきます。
$ export AWS_DEFAULT_PROFILE=test
一時クレデンシャルを取得し環境変数に設定
毎回手動は大変なので、本操作を行うためのスクリプトを用意しました。
今回は例として、ルートディレクトリに scripts
というディレクトリを作成し、その中に scr.sh
というスクリプトを作成しました。(scr
は set credential
の略です)
$ mkdir ~/scripts $ touch ~/scripts/scr.sh $ chmod +x ~/scripts/scr.sh
scr.sh
ファイルは、下記の内容で保存します。
#!/bin/sh getopts "a:" opt mfa_code=$OPTARG AWS_STS_CREDENTIALS=`aws sts assume-role \ --profile default \ --role-arn $(aws configure get $AWS_DEFAULT_PROFILE.role_arn) \ --role-session-name $AWS_DEFAULT_PROFILE-session \ --serial-number $(aws configure get $AWS_DEFAULT_PROFILE.mfa_serial) \ --token-code $mfa_code` AWS_ACCESS_KEY_ID=`echo "${AWS_STS_CREDENTIALS}" | jq -r '.Credentials.AccessKeyId'` AWS_SECRET_ACCESS_KEY=`echo "${AWS_STS_CREDENTIALS}" | jq -r '.Credentials.SecretAccessKey'` AWS_SESSION_TOKEN=`echo "${AWS_STS_CREDENTIALS}" | jq -r '.Credentials.SessionToken'`
scr
コマンドを実行するため、.zshrc
に下記を追記します。
alias scr='source ~/scripts/scr.sh'
jqが使われているので、インストールしていない場合はインストールする必要があります。
brew install jq
以上で準備完了です!
スクリプトを実行
下記コマンドで、一時クレデンシャル情報を設定します。
-a
オプションに、MFAコードを指定します。
$ scr -a 144086 $ echo $AWS_SESSION_TOKEN # AWS_SESSION_TOKENが表示される
実行後、各環境変数を確認すると、設定されていることがわかります。
今後は上記コマンドを呼ぶだけなので、楽になった気がします!
まだまだわからないことも多いですが、日々勉強していこうと思います!